10 REM ****************************** 20 REM * DIRECTORY MANIPULATOR INIT * 30 REM ****************************** 40 PRINT"[147]"TAB(9)"[144]DIRECTORY MANIPULATOR[159]" 50 PRINTTAB(5)"INSERT DISKETTE TO MANIPULATE":GOSUB1430 60 DIMF$(144):FORI=1TO11:FL$=FL$+CHR$(0):NEXT:TY$=CHR$(131)+CHR$(18)+CHR$(0) 70 DIMS%(18):S%(1)=1:FORI=1TO17 80 IFI=6THENS%(I+1)=2:NEXT 90 IFI=12THENS%(I+1)=3:NEXT 100 S%(I+1)=S%(I)+3:NEXT 110 T=18:S=1:N=1:OK=0 120 SP$="":FORI=1TO16:SP$=SP$+CHR$(160):NEXT 130 REM ****************** 140 REM * INIT DISK UNIT * 150 REM ****************** 160 OPEN15,8,15,"I0":GOSUB1550 170 PRINTTAB(12)" DISK UNIT OK !" 180 REM ************************** 190 REM * READ DIRECTORY ROUTINE * 200 REM ************************** 210 OPEN2,8,2,"#" 220 PRINT#15,"U1";2;0;T;S 230 GOSUB1550 240 GET#2,T$,S$:REM * TRACK & SECTOR OF NEXT DIR ENTRY * 250 T=ASC(T$+CHR$(0)):S=ASC(S$+CHR$(0)) 260 FORI=1TO8 270 F$="":FORX=1TO30:REM * GET DIRECTORY ENTRIES * 280 GET#2,B$:B=ASC(B$+CHR$(0)):IFX=1THENA=B 290 IFX=4THENC=B 300 F$=F$+CHR$(B):NEXTX 310 IFA<>0OR(A=0ANDC=160)THENF$(N)=F$:N=N+1 320 GET#2,B$,B$:NEXTI:REM * DIR ENTRIES 2-7 GARBAGE 1ST 2 BYTES * 330 IFT<>0THEN220 340 REM *************************** 350 REM * PRINT DIRECTORY ROUTINE * 360 REM *************************** 370 Z=1:OD=0:P1=20:PG=P1:X=INT((N-1)/2)+1:IF(N-1)-(2*(X-1))=1THENX=X+1:OD=1 380 XX=X-1:PC=INT(XX/PG):IF(XX/PG)-PC<>0THENPC=PC+1 390 IFXX>PGTHENX=PG+1 400 FORI=1TOXX:PRINT"[144]"RIGHT$(STR$(Z),2)"[159]";MID$(F$(Z),4,16):Z=Z+1 410 IFOD=0OR(OD=1AND2*XX<>X)THENPRINTTAB(19)"[145][144]"RIGHT$(STR$(X),2)"[159]";MID$(F$(X),4,16):X=X+1 420 IFINT(I/PG)=1ANDPC>=2THENPG=PG+P1:GOSUB1430:PC=PC-1:GOTO440 430 GOTO460 440 Z=X:IFPC=>2THENX=Z+P1 450 IFPC=1THENX=INT(((2*XX)-(2*I))/2)+Z 460 NEXTI 470 CLOSE15:CLOSE2 480 REM ***************** 490 REM * CHECK DIR OK? * 500 REM ***************** 510 PRINT:PRINT"DIRECTORY OK (Y/N)";:INPUT"N[157][157][157]";OK$ 520 IFOK$<>"Y"ANDOK$<>"N"THENPRINT"[145][145][145]":GOTO510 530 IFOK$="Y"ANDOK=0THENGOTO1660:REM * EXIT DIR MANIPULATOR * 540 IFOK$="Y"ANDOK=1THENGOTO730:REM * RE-WRITE DIRECTORY * 550 REM ******************** 560 REM * SELECT MANIP CMD * 570 REM ******************** 580 PRINT"SELECT DIRECTORY MANIPULATION COMMAND:" 590 GETCM$:IFCM$=""THEN590 600 IFCM$="[133]"THENPRINT"RE-LIST DIRECTORY":GOTO370 610 IFCM$="H"THENGOSUB1340:GOTO370 620 OK=1:IFCM$="[137]"THENPRINT"ALPHABATIZE DIRECTORY":GOSUB920:GOTO370 630 IFCM$="[134]"THENPRINT"INSERT BLANK ENTRY":GOSUB1010:GOTO370 640 IFCM$="[138]"THENPRINT"DELETE BLANK ENTRIES":GOSUB1050:GOTO370 650 IFCM$="[135]"THENPRINT"INSERT -----[146] ENTRY":GOSUB1130:GOTO370 660 IFCM$="[139]"THENPRINT"INSERT 'REMARK' ENTRY":GOSUB1170:GOTO370 670 IFCM$="[136]"THENPRINT"SWAP DIRECTORY ENTRIES":GOSUB1230:GOTO370 680 IFCM$="[140]"THENPRINT"DELETE DIRECTORY ENTRY":GOSUB1280:GOTO370 690 PRINT"[147]":GOTO580 700 REM ********************** 710 REM * RE-WRITE DIRECTORY * 720 REM ********************** 730 PRINT"[147] WRITING NEW DIRECTORY...PLEASE WAIT![146]" 740 F$="":FORI=1TO32:F$=F$+CHR$(0):NEXTI 750 OPEN15,8,15,"I0":GOSUB1550 760 PRINTTAB(12)" DISK UNIT OK !" 770 OPEN2,8,2,"#":X=INT((N-1)/8):XX=0:IF((N-1)/8)-X<>0THENX=X+1 780 FORI=1TOX:PRINT#15,"B-P:";2;0:REM * POSITION BUFFER POINTER * 790 T=18:IFI=XTHENT=0:REM * SET NEXT DIR SEC POINTER TO 0 IF LAST SECTOR * 800 PRINT#2,CHR$(T);CHR$(S%(I+1));:REM * POINTER TO NEXT TR/SE OF DIR * 810 FORZ=1TO8:XX=XX+1 820 IFXX=>NTHENPRINT#2,F$;:GOTO850 830 PRINT#2,F$(XX);:REM * PUT DIR ENTRIES INTO BUFFER * 840 IFZ<>8ANDXX<>(N-1)THENPRINT#2,"SG";:REM * TRASH BYTES FOR DIR ENTRIES 2-7 * 850 NEXTZ 860 PRINT#15,"U2:";2;0;18;S%(I):REM * WRITE DIR SECTOR * 870 PRINT"WRITING TRACK 18 SECTOR"STR$(S%(I)) 880 NEXTI:CLOSE2:CLOSE15:GOTO1660 890 REM ************************* 900 REM * ALPHABATIZE DIRECTORY * 910 REM ************************* 920 X=N 930 X=INT(X/2):IFX=0THENRETURN 940 FORI=1TO((N-1)-X):Y=I 950 Z=Y+X:IFMID$(F$(Y),4,16)<=MID$(F$(Z),4,16)THEN970 960 FF$=F$(Y):F$(Y)=F$(Z):F$(Z)=FF$:Y=Y-X:IFY>0THEN950 970 NEXT:GOTO930 980 REM ********************** 990 REM * INSERT BLANK ENTRY * 1000 REM ********************** 1010 GOSUB1490:F$(BL)=CHR$(0)+CHR$(0)+CHR$(0)+SP$+FL$:RETURN 1020 REM ************************ 1030 REM * DELETE BLANK ENTRIES * 1040 REM ************************ 1050 FORI=1TON-1:IFASC(F$(I))=0THEN1070 1060 NEXT:RETURN 1070 FORX=BLTON-1 1080 IFBL16THEN1170 1180 IFLEN(RM$)<16THENFORI=1TO(16-LEN(RM$)):RM$=RM$+CHR$(160):NEXT 1190 F$(BL)=TY$+RM$+FL$:RETURN 1200 REM ************************* 1210 REM * SWAP DIRECTORY ENTRIES * 1220 REM ************************* 1230 PRINT"1ST ";:GOSUB1490:A=BL:PRINT"2ND ";:GOSUB1490:F$(B)=F$(A):F$(A)=F$(BL) 1240 F$(BL)=F$(B):RETURN 1250 REM ************************** 1260 REM * DELETE DIRECTORY ENTRY * 1270 REM ************************** 1280 GOSUB1490:FORX=BLTON-1 1290 IFBL RE-LIST DIRECTORY":PRINT" F2 -> ALPHABATIZE DIRECTORY" 1360 PRINT" F3 -> INSERT BLANK ENTRY":PRINT" F4 -> DELETE BLANK ENTRIES" 1370 PRINT" F5 -> INSERT -----[146] ENTRY":PRINT" F6 -> INSERT 'REMARK' ENTRY" 1380 PRINT" F7 -> SWAP DIRECTORY ENTRIES":PRINT" F8 -> DELETE DIRECTORY ENTRY" 1390 GOSUB1430:RETURN 1400 REM ********************** 1410 REM * HIT KEY SUBROUTINE * 1420 REM ********************** 1430 PRINT:PRINTTAB(13)"HIT ANY KEY!!!" 1440 GETCK$:IFCK$=""THEN1440 1450 RETURN 1460 REM ************************************************** 1470 REM * LOC OF ENTRY/MOVE DIR ARRAY ENTRIES SUBROUTINE * 1480 REM ************************************************** 1490 PRINT"LOCATION OF ENTRY: [157][157][157][157]";:INPUTBL:IFBL>N-1ORBL<1THENPRINT"[145][145]":GOTO1490 1500 IFCM$="[136]"ORCM$="[140]"THENRETURN 1510 N=N+1:FORI=N-1TOBL+1STEP-1:F$(I)=F$(I-1):NEXT:RETURN 1520 REM ********************* 1530 REM * DISK STATUS CHECK * 1540 REM ********************* 1550 INPUT#15,EN,EM$,ET,ES:IFEN<>0THENGOTO1600 1560 RETURN 1570 REM *************************** 1580 REM * DISK UNIT ERROR ROUTINE * 1590 REM *************************** 1600 PRINT"[147]"TAB(12)"DISK UNIT ERROR!" 1610 PRINT"ERROR # -"EN"[157]; TRACK -"ET"[157]; SECTOR -"SE 1620 PRINT"ERROR MSG - "EM$:END 1630 REM ****************************** 1640 REM * EXIT DIRECTORY MANIPULATOR * 1650 REM ****************************** 1660 PRINT"[147]MANIPULATE ANOTHER DISKETTE (Y/N)";:INPUT"N[157][157][157]";AN$ 1670 IFAN$<>"Y"ANDAN$<>"N"THEN1660 1680 PRINT"DISKETTE BEING VALIDATED":OPEN15,8,15:PRINT#15,"V":PRINT#15,"I":CLOSE15 1690 IFAN$="Y"THENRUN 1700 END